package v1

import (
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// MysqlClusterSpec defines the desired state of MysqlCluster
type MysqlClusterSpec struct {
	Master      string `json:"master"`
	Slave       string `json:"slave"`
	MasterImage string `json:"masterImage"`
	SlaveImage  string `json:"slaveImage"`
	ServiceName string `json:"serviceName"`

	MasterConfigMap string `json:"masterConfigMap"`
	SlaveConfigMap  string `json:"slaveConfigMap"`
}

// MysqlClusterStatus defines the observed state of MysqlCluster
type MysqlClusterStatus struct {
	Master   string `json:"master,omitempty"`
	Slave    string `json:"slave,omitempty"`
	Ready    bool   `json:"ready,omitempty"`
	Failover bool   `json:"failover,omitempty"` // Indicates if failover happened
}

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status

// MysqlCluster is the Schema for the mysqlclusters API
type MysqlCluster struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              MysqlClusterSpec   `json:"spec,omitempty"`
	Status            MysqlClusterStatus `json:"status,omitempty"`
}

// +kubebuilder:object:root=true

// MysqlClusterList contains a list of MysqlCluster
type MysqlClusterList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []MysqlCluster `json:"items"`
}

func init() {
	SchemeBuilder.Register(&MysqlCluster{}, &MysqlClusterList{})
}
